home *** CD-ROM | disk | FTP | other *** search
- {@@@@@@@@@@@ copyright (C) 1984 by Neil J. Rubenking @@@@@@@@@@@@@@@@@@@@@@@@
- The purchaser of these procedures and functions may include them in COMPILED
- programs freely, but may not sell or give away the source text.
-
- This is a handy application that internally resets the switches
- that tell your PC how many diskette drives it has. Certain RAM
- DISK programs require switch settings to be set to the number
- of physical drives PLUS the number of RAM disks you will want.
- Others require that the switches show ONLY the physical drives.
- NUMDISKS lets you keep your switches set for the physical drives
- and reset them WITHOUT opening the PC box if need be.
-
- NUMDISKS works ONLY in COMPILED form. There may be a problem if
- it is activated any time except immediately after a system reset.
-
- You can enter "NUMDISKS <number>", where <number> is 1..4. If you
- want to skip the "press a key to reboot", add an N (or n) to your
- parameter line (e.g., NUMDISKS 3n)
- }
- {$I regpack.typ}
- {$I equipmnt.lib}
- {$I reboot.lib}
- {$I parametr.lib}
- var
- Equip_word : integer absolute $0040:$0010;
- StrNumber : string[3];
- OldNumber, NewNumber, error : integer;
- Mask, BitChanges : integer;
- Wait : boolean;
- begin
- StrNumber := GetParameters;
- Wait := true;
- OldNumber := equipment('D');
- GotoXY(1,5);
- WriteLn('Switches currently set for ',OldNumber,' disk drives.');
- if pos('N',StrNumber) <> 0 then
- begin
- delete(StrNumber,pos('N',StrNumber),1);
- Wait := false;
- end;
- if pos('n',StrNumber) <> 0 then
- begin
- delete(StrNumber,pos('n',StrNumber),1);
- Wait := false;
- end;
- while pos(' ',StrNumber) <> 0 do
- delete(StrNumber,pos(' ',StrNumber),1);
- val(StrNumber, NewNumber, error);
- if error <> 0 then NewNumber := 5;
- if not (NewNumber in [1..4]) then
- begin
- WriteLn('Enter new number of diskette drives (1..4)');
- repeat
- read(NewNumber);
- until newNumber in [0..4];
- WriteLn;
- end;
- if NewNumber = 0 then
- begin
- Mask := $FF3E; { In binary, $FF3E is 1111111100111110. When we
- AND this mask onto the Equipment flag, it
- turns OFF the bottom byte (byte #0) and bytes
- # 6 and 7. Byte # 0 indicates whether there
- are ANY disk drives, and #6,7 say HOW many.}
- BitChanges := 0
- end
- else
- begin
- Mask := $FF3F; { ANDing $FF3F onto the Equipment Flag turns OFF
- bits # 6 and 7, the old value for number of
- disk drives. Then we OR BitChanges onto it to
- turn ON the correct bits for the new value}
- BitChanges := (((NewNumber-1) shl 6) +1);
- end;
- if OldNumber <> NewNumber then
- begin
- Equip_word := (Equip_word and Mask ) or BitChanges;
- WriteLn('Changed equipment information to indicate ',NewNumber:1,' drives');
- if wait then
- begin
- WriteLn('Press a key to reboot and activate new information.');
- repeat until keypressed;
- end
- else
- begin
- write(chr(7));
- WriteLn('Rebooting now.');
- end;
- reboot;
- end
- else
- WriteLn('No change required.');
- end.
-